﻿// -----------------------------------------------------------------------
// <copyright file="UrlBuilder.cs" company="">
// TODO: Update copyright text.
// </copyright>
// -----------------------------------------------------------------------

namespace NetFramework.Web.Resources
{
    using System;
    using System.Text;
    using System.Collections.Specialized;

    /// <summary>
    /// 提供建造Url的方法。
    /// </summary>
    //public class UrlBuilder : IUrlBuilder
    //{
    //    /// <summary>
    //    /// 
    //    /// </summary>
    //    public UrlBuilder()
    //    {
    //    }
    //    #region IUrlBuilder Members

    //    /// <summary>
    //    /// 构造Url
    //    /// </summary>
    //    /// <param name="pageAlias"></param>
    //    /// <returns></returns>
    //    public string BuildUrl(Enum pageAlias)
    //    {
    //        return BuildUrl(pageAlias, default(QueryStringBuilder));
    //    }

    //    /// <summary>
    //    /// 构造Url
    //    /// </summary>
    //    /// <param name="pageAlias"></param>
    //    /// <param name="queryString">The query string. in the format of param1, value1, param2, value2, ...</param>
    //    /// <returns></returns>
    //    public string BuildUrl(Enum pageAlias, params string[] queryString)
    //    {
    //        QueryStringBuilder builder = new QueryStringBuilder(contentEncoding);
    //        for (int i = 0; i < queryString.Length; i += 2)
    //        {
    //            if (i + 1 >= queryString.Length)
    //            {
    //                break;
    //            }
    //            builder.AddQueryString(queryString[i], queryString[i + 1]);
    //        }

    //        return BuildUrl(pageAlias, builder);
    //    }

    //    /// <summary>
    //    /// 构造Url
    //    /// </summary>
    //    /// <param name="pageAlias"></param>
    //    /// <param name="queryString"></param>
    //    /// <returns></returns>
    //    public string BuildUrl(Enum pageAlias, NameValueCollection queryString)
    //    {
    //        QueryStringBuilder queryStringBuilder = new QueryStringBuilder(queryString, contentEncoding);
    //        return BuildUrl(pageAlias, queryStringBuilder);
    //    }

    //    /// <summary>
    //    /// 
    //    /// </summary>
    //    /// <param name="pageName"></param>
    //    /// <returns></returns>
    //    public string BuildPageUrl(string pageName)
    //    {
    //        QueryStringBuilder builder = GetQueryStringBuilder();
    //        PageInfo pageInfo = WebResourceConfigHelper.PageInfoConfig.GetPageInfo(pageName);
    //        return BuildUrl(pageInfo, builder);
    //    }

    //    /// <summary>
    //    /// 构造Url
    //    /// </summary>
    //    /// <param name="url">站点相对路径(~/)或http(s)绝对路径或站点根路径</param>
    //    /// <param name="queryString">The query string. in the format of param1, value1, param2, value2, ...</param>
    //    /// <returns></returns>
    //    public virtual string BuildUrl(string url, params string[] queryString)
    //    {
    //        QueryStringBuilder builder = new QueryStringBuilder(contentEncoding);
    //        for (int i = 0; i < queryString.Length; i += 2)
    //        {
    //            if (i + 1 >= queryString.Length)
    //            {
    //                break;
    //            }
    //            builder.AddQueryString(queryString[i], queryString[i + 1]);
    //        }
    //        return BuildUrl(url, builder);
    //    }

    //    /// <summary>
    //    /// 构造Url
    //    /// </summary>
    //    /// <param name="url">站点相对路径(~/)或http(s)绝对路径或站点根路径</param>
    //    /// <param name="queryString"></param>
    //    /// <returns></returns>
    //    public virtual string BuildUrl(string url, NameValueCollection queryString)
    //    {
    //        QueryStringBuilder queryStringBuilder = new QueryStringBuilder(queryString, contentEncoding);
    //        return BuildUrl(url, queryStringBuilder);
    //    }

    //    /// <summary>
    //    /// 构造Url
    //    /// </summary>
    //    /// <param name="url">站点相对路径(~/)或http(s)绝对路径或站点根路径</param>
    //    /// <param name="queryStringBuilder"></param>
    //    /// <returns></returns>
    //    public virtual string BuildUrl(string url, QueryStringBuilder queryStringBuilder)
    //    {
    //        string baseUrl = url;
    //        if (url.StartsWith("~/"))
    //            baseUrl = VirtualPathUtility.ToAbsolute(url);

    //        if (queryStringBuilder != null && queryStringBuilder.QueryStringItemCount > 0)
    //            return string.Format(CultureInfo.InvariantCulture, "{0}?{1}", baseUrl, queryStringBuilder.ToString());
    //        else
    //            return baseUrl;
    //    }

    //    /// <summary>
    //    /// Adds query string to the url
    //    /// </summary>
    //    /// <param name="key">name of the parameter, cannot be url-encoded.</param>
    //    /// <param name="value">value of the parameter, cannot be url-encoded.</param>
    //    public void AddQueryString(string key, string value)
    //    {
    //        if (queryStringBuilder == null)
    //        {
    //            queryStringBuilder = new QueryStringBuilder(contentEncoding);
    //        }

    //        if (!string.IsNullOrEmpty(key) &&
    //            !string.IsNullOrEmpty(value))
    //        {
    //            queryStringBuilder.AddQueryString(key, value);
    //        }
    //    }

    //    #endregion

    //    /// <summary>
    //    /// 根据页面配置路径构造Url
    //    /// </summary>
    //    /// <param name="pageInfo"></param>
    //    /// <param name="queryStringBuilder"></param>
    //    /// <returns>Url, 如果pageInfo为null，则返回""</returns>
    //    protected virtual string BuildUrl(PageInfo pageInfo, QueryStringBuilder queryStringBuilder)
    //    {
    //        string url = "";
    //        if (pageInfo != null)
    //        {
    //            string urlBase = pageInfo.Path;
    //            string rootPath = GetRootPath(pageInfo.RootPath);
    //            if (!StringUtils.IsNullOrEmpty(rootPath))
    //            {
    //                if (urlBase.StartsWith("~/"))
    //                    urlBase = urlBase.Substring(2);

    //                urlBase = string.Format("{0}/{1}", rootPath.TrimEnd('/', '\\'), urlBase.TrimStart('/', '\\'));
    //            }

    //            url = BuildUrl(urlBase, queryStringBuilder);
    //        }

    //        return url;
    //    }

    //    /// <summary>
    //    /// 
    //    /// </summary>
    //    /// <param name="rootPath"></param>
    //    /// <returns></returns>
    //    private string GetRootPath(string rootPath)
    //    {
    //        if (StringUtils.IsEmpty(rootPath))
    //        {
    //            if (WebApplicationContext.PageInfo != null)
    //            {
    //                rootPath = WebApplicationContext.PageInfo.RootPath;
    //            }
    //            else
    //            {
    //                rootPath = WebRootPathHelper.GetRootPathBySeed("WWWSite");
    //            }
    //        }

    //        return rootPath;
    //    }

    //    /// <summary>
    //    /// 
    //    /// </summary>
    //    /// <param name="requestContext"></param>
    //    /// <returns></returns>
    //    private QueryStringBuilder GetQueryStringBuilder()
    //    {
    //        QueryStringBuilder builder = new QueryStringBuilder();

    //        HttpRequest request = HttpContext.Current.Request;
    //        NameValueCollection queryStrings = request.QueryString ?? new NameValueCollection();
    //        foreach (string key in queryStrings)
    //        {
    //            builder.AddQueryString(key, queryStrings[key] ?? string.Empty);
    //        }

    //        return builder;
    //    }
    //}
}
